Data Summary

income <- read.csv("https://ecoleman451.github.io/ecoleman/w6/income_per_person.csv")

life <- read.csv("https://ecoleman451.github.io/ecoleman/w6/life_expectancy_years.csv")

# Reshape data set such that there are only three columns (Geo, Year, & Income)
new_income <- pivot_longer(income, cols = -geo, names_to = "year", values_to = "income")

new_life <- pivot_longer(life, cols = -geo, names_to = "year", values_to = "life.expectancy")

## Create new data set
LifeExpIncom <- merge(new_life, new_income, by = c("geo", "year"))

## Read in More Data
country <- read.csv("https://ecoleman451.github.io/ecoleman/w6/countries_total.csv")

pop <- read.csv("https://ecoleman451.github.io/ecoleman/w6/population_total.csv")

new_pop <- pivot_longer(pop, cols = -geo, names_to = "year", values_to = "population")

## Merge LifeExpIncom with Country
merged <- merge(LifeExpIncom, country, by.x = "geo", by.y = "name", all.x = TRUE)

## Merge Population with Merged Data
fin_data <- merge(new_pop, merged, by = c("geo", "year"), all.x = TRUE)

## Get Data for Year 2015
final_data <- subset(fin_data, year =="X2015")
summary(final_data)
     geo                year             population        life.expectancy
 Length:195         Length:195         Min.   :8.030e+02   Min.   :49.60  
 Class :character   Class :character   1st Qu.:1.955e+06   1st Qu.:66.05  
 Mode  :character   Mode  :character   Median :8.320e+06   Median :73.30  
                                       Mean   :3.768e+07   Mean   :71.93  
                                       3rd Qu.:2.725e+07   3rd Qu.:77.50  
                                       Max.   :1.400e+09   Max.   :83.80  
                                                           NA's   :8      
     income         alpha.2            alpha.3           country.code  
 Min.   :   623   Length:195         Length:195         Min.   :  4.0  
 1st Qu.:  3270   Class :character   Class :character   1st Qu.:209.0  
 Median : 10800   Mode  :character   Mode  :character   Median :418.0  
 Mean   : 17179                                         Mean   :424.9  
 3rd Qu.: 24100                                         3rd Qu.:642.8  
 Max.   :120000                                         Max.   :894.0  
 NA's   :8                                              NA's   :21     
  iso_3166.2           region           sub.region        intermediate.region
 Length:195         Length:195         Length:195         Length:195         
 Class :character   Class :character   Class :character   Class :character   
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   
                                                                             
                                                                             
                                                                             
                                                                             
  region.code     sub.region.code intermediate.region.code
 Min.   :  2.00   Min.   : 15.0   Min.   : 5.00           
 1st Qu.:  2.00   1st Qu.: 54.0   1st Qu.:11.00           
 Median : 19.00   Median :154.0   Median :14.00           
 Mean   : 71.74   Mean   :177.9   Mean   :14.89           
 3rd Qu.:142.00   3rd Qu.:202.0   3rd Qu.:17.00           
 Max.   :150.00   Max.   :419.0   Max.   :29.00           
 NA's   :21       NA's   :21      NA's   :119             

Plotly

scatter_plot <- plot_ly(
  data = final_data,
  x = ~income,
  y = ~life.expectancy,
  size = ~population,
  color = ~geo,
  text = ~paste("Country: ", geo, "<br>Population: ", population),
  type = "scatter",
  mode = "markers",
  marker = list(
    opacity = 0.6,  # Transparency level
    sizemode = "diameter",  # Set the size mode to diameter
    sizeref = 0.1,  # Adjust the size reference for better visibility
    line = list(
      color = "black",  # Boundary color for points
      width = 1  # Boundary width
    )
  )
)
layout <- list(
  title = "Association Between Life Expectancy and Income (Year 2015)",
  xaxis = list(title = "Income"),
  yaxis = list(title = "Life Expectancy"),
  showlegend = FALSE  # Hide legend for individual countries
)

# Combine the plot and layout
scatter_plot <- layout(scatter_plot, layout)

# Display the interactive scatter plot
scatter_plot
LS0tDQp0aXRsZTogIlBsb3RseSINCmF1dGhvcjogIkVkd2FyZCBDb2xlbWFuIg0KZGF0ZTogIldlc3QgQ2hlc3RlciBVbml2ZXJzaXR5Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50OiANCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMNCiAgICB0aGVtZTogbHVtZW4NCmVkaXRvcl9vcHRpb25zOg0KICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lDQotLS0NCg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCg0KZGl2I1RPQyBsaSB7DQogICAgbGlzdC1zdHlsZTpub25lOw0KICAgIGJhY2tncm91bmQtY29sb3I6bGlnaHRncmF5Ow0KICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOw0KICAgIGJhY2tncm91bmQtcG9zaXRpb246MDsNCiAgICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCiAgICBjb2xvcjogIzc4MGMwYzsNCn0NCg0KaDEudGl0bGUgew0KICBmb250LXNpemU6IDI0cHg7DQogIGNvbG9yOiBEYXJrUmVkOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOw0KICBmb250LXZhcmlhbnQtY2Fwczogbm9ybWFsOw0KfQ0KaDQuYXV0aG9yIHsgDQogICAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgY29sb3I6IERhcmtSZWQ7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCmg0LmRhdGUgeyANCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgY29sb3I6IERhcmtCbHVlOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQpoMSB7IA0KICAgIGZvbnQtc2l6ZTogMjJweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQpoMiB7IA0KICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoMyB7IA0KICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoNCB7DQogICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCg0KLyogVGFiIGZlYXR1cmVzICovDQoubmF2PmxpPmEgew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBwYWRkaW5nOiAycHggMTVweDsNCiAgICBjb2xvcjogIzk5MDAwMDsNCn0NCi5uYXYtcGlsbHM+bGkuYWN0aXZlPmEsIC5uYXYtcGlsbHM+bGkuYWN0aXZlPmE6aG92ZXIsIC5uYXYtcGlsbHM+bGkuYWN0aXZlPmE6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICM5OTAwMDA7DQp9DQovKg0KbmF2LXBpbGxzPmxpOm50aC1jaGlsZCgyKSB7DQogICAgYmFja2dyb3VuZDogZ3JlZW47DQogfQ0KICovDQo8L3N0eWxlPg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCm9wdGlvbnMocmVwb3MgPSBsaXN0KENSQU49Imh0dHA6Ly9jcmFuLnJzdHVkaW8uY29tLyIpKQ0KaWYgKCFyZXF1aXJlKCJ0aWR5dmVyc2UiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikNCiAgIGxpYnJhcnkodGlkeXZlcnNlKQ0KfQ0KaWYgKCFyZXF1aXJlKCJrbml0ciIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJrbml0ciIpDQogICBsaWJyYXJ5KGtuaXRyKQ0KfQ0KaWYgKCFyZXF1aXJlKCJjb3dwbG90IikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImNvd3Bsb3QiKQ0KICAgbGlicmFyeShjb3dwbG90KQ0KfQ0KaWYgKCFyZXF1aXJlKCJsYXRleDJleHAiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygibGF0ZXgyZXhwIikNCiAgIGxpYnJhcnkobGF0ZXgyZXhwKQ0KfQ0KaWYgKCFyZXF1aXJlKCJwbG90bHkiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IikNCiAgIGxpYnJhcnkocGxvdGx5KQ0KfQ0KaWYgKCFyZXF1aXJlKCJnYXBtaW5kZXIiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygiZ2FwbWluZGVyIikNCiAgIGxpYnJhcnkoZ2FwbWluZGVyKQ0KfQ0KaWYgKCFyZXF1aXJlKCJwbmciKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoInBuZyIpICAgIA0KICAgIGxpYnJhcnkoInBuZyIpDQp9DQppZiAoIXJlcXVpcmUoIlJDdXJsIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJSQ3VybCIpICAgIA0KICAgIGxpYnJhcnkoIlJDdXJsIikNCn0NCmlmICghcmVxdWlyZSgiY29sb3VycGlja2VyIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJjb2xvdXJwaWNrZXIiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiY29sb3VycGlja2VyIikNCn0NCmlmICghcmVxdWlyZSgiZ2dhbmltYXRlIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnZ2FuaW1hdGUiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiZ2dhbmltYXRlIikNCn0NCmlmICghcmVxdWlyZSgiZ2lmc2tpIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnaWZza2kiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiZ2lmc2tpIikNCn0NCmlmICghcmVxdWlyZSgibWFnaWNrIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJtYWdpY2siKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgibWFnaWNrIikNCn0NCmlmICghcmVxdWlyZSgiZ3JEZXZpY2VzIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnckRldmljZXMiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiZ3JEZXZpY2VzIikNCn0NCmlmICghcmVxdWlyZSgianBlZyIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygianBlZyIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJqcGVnIikNCn0NCmlmICghcmVxdWlyZSgiZ2dyaWRnZXMiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImdncmlkZ2VzIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImdncmlkZ2VzIikNCn0NCmlmICghcmVxdWlyZSgicGx5ciIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygicGx5ciIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJwbHlyIikNCn0NCmlmICghcmVxdWlyZSgiZ2dpcmFwaCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiZ2dpcmFwaCIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJnZ2lyYXBoIikNCn0NCmlmICghcmVxdWlyZSgiaGlnaGNoYXJ0ZXIiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImhpZ2hjaGFydGVyIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImhpZ2hjaGFydGVyIikNCn0NCmlmICghcmVxdWlyZSgiZm9yZWNhc3QiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImZvcmVjYXN0IikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImZvcmVjYXN0IikNCn0NCiMjIA0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UsICAgDQogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVFJVRSwgICANCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IE5BKQ0KYGBgDQoNCiMgRGF0YSBTdW1tYXJ5DQpgYGB7cn0NCmluY29tZSA8LSByZWFkLmNzdigiaHR0cHM6Ly9lY29sZW1hbjQ1MS5naXRodWIuaW8vZWNvbGVtYW4vdzYvaW5jb21lX3Blcl9wZXJzb24uY3N2IikNCg0KbGlmZSA8LSByZWFkLmNzdigiaHR0cHM6Ly9lY29sZW1hbjQ1MS5naXRodWIuaW8vZWNvbGVtYW4vdzYvbGlmZV9leHBlY3RhbmN5X3llYXJzLmNzdiIpDQoNCiMgUmVzaGFwZSBkYXRhIHNldCBzdWNoIHRoYXQgdGhlcmUgYXJlIG9ubHkgdGhyZWUgY29sdW1ucyAoR2VvLCBZZWFyLCAmIEluY29tZSkNCm5ld19pbmNvbWUgPC0gcGl2b3RfbG9uZ2VyKGluY29tZSwgY29scyA9IC1nZW8sIG5hbWVzX3RvID0gInllYXIiLCB2YWx1ZXNfdG8gPSAiaW5jb21lIikNCg0KbmV3X2xpZmUgPC0gcGl2b3RfbG9uZ2VyKGxpZmUsIGNvbHMgPSAtZ2VvLCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gImxpZmUuZXhwZWN0YW5jeSIpDQoNCiMjIENyZWF0ZSBuZXcgZGF0YSBzZXQNCkxpZmVFeHBJbmNvbSA8LSBtZXJnZShuZXdfbGlmZSwgbmV3X2luY29tZSwgYnkgPSBjKCJnZW8iLCAieWVhciIpKQ0KDQojIyBSZWFkIGluIE1vcmUgRGF0YQ0KY291bnRyeSA8LSByZWFkLmNzdigiaHR0cHM6Ly9lY29sZW1hbjQ1MS5naXRodWIuaW8vZWNvbGVtYW4vdzYvY291bnRyaWVzX3RvdGFsLmNzdiIpDQoNCnBvcCA8LSByZWFkLmNzdigiaHR0cHM6Ly9lY29sZW1hbjQ1MS5naXRodWIuaW8vZWNvbGVtYW4vdzYvcG9wdWxhdGlvbl90b3RhbC5jc3YiKQ0KDQpuZXdfcG9wIDwtIHBpdm90X2xvbmdlcihwb3AsIGNvbHMgPSAtZ2VvLCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gInBvcHVsYXRpb24iKQ0KDQojIyBNZXJnZSBMaWZlRXhwSW5jb20gd2l0aCBDb3VudHJ5DQptZXJnZWQgPC0gbWVyZ2UoTGlmZUV4cEluY29tLCBjb3VudHJ5LCBieS54ID0gImdlbyIsIGJ5LnkgPSAibmFtZSIsIGFsbC54ID0gVFJVRSkNCg0KIyMgTWVyZ2UgUG9wdWxhdGlvbiB3aXRoIE1lcmdlZCBEYXRhDQpmaW5fZGF0YSA8LSBtZXJnZShuZXdfcG9wLCBtZXJnZWQsIGJ5ID0gYygiZ2VvIiwgInllYXIiKSwgYWxsLnggPSBUUlVFKQ0KDQojIyBHZXQgRGF0YSBmb3IgWWVhciAyMDE1DQpmaW5hbF9kYXRhIDwtIHN1YnNldChmaW5fZGF0YSwgeWVhciA9PSJYMjAxNSIpDQpzdW1tYXJ5KGZpbmFsX2RhdGEpDQpgYGANCg0KDQojIFBsb3RseQ0KYGBge3J9DQpzY2F0dGVyX3Bsb3QgPC0gcGxvdF9seSgNCiAgZGF0YSA9IGZpbmFsX2RhdGEsDQogIHggPSB+aW5jb21lLA0KICB5ID0gfmxpZmUuZXhwZWN0YW5jeSwNCiAgc2l6ZSA9IH5wb3B1bGF0aW9uLA0KICBjb2xvciA9IH5nZW8sDQogIHRleHQgPSB+cGFzdGUoIkNvdW50cnk6ICIsIGdlbywgIjxicj5Qb3B1bGF0aW9uOiAiLCBwb3B1bGF0aW9uKSwNCiAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgbW9kZSA9ICJtYXJrZXJzIiwNCiAgbWFya2VyID0gbGlzdCgNCiAgICBvcGFjaXR5ID0gMC42LCAgIyBUcmFuc3BhcmVuY3kgbGV2ZWwNCiAgICBzaXplbW9kZSA9ICJkaWFtZXRlciIsICAjIFNldCB0aGUgc2l6ZSBtb2RlIHRvIGRpYW1ldGVyDQogICAgc2l6ZXJlZiA9IDAuMSwgICMgQWRqdXN0IHRoZSBzaXplIHJlZmVyZW5jZSBmb3IgYmV0dGVyIHZpc2liaWxpdHkNCiAgICBsaW5lID0gbGlzdCgNCiAgICAgIGNvbG9yID0gImJsYWNrIiwgICMgQm91bmRhcnkgY29sb3IgZm9yIHBvaW50cw0KICAgICAgd2lkdGggPSAxICAjIEJvdW5kYXJ5IHdpZHRoDQogICAgKQ0KICApDQopDQpsYXlvdXQgPC0gbGlzdCgNCiAgdGl0bGUgPSAiQXNzb2NpYXRpb24gQmV0d2VlbiBMaWZlIEV4cGVjdGFuY3kgYW5kIEluY29tZSAoWWVhciAyMDE1KSIsDQogIHhheGlzID0gbGlzdCh0aXRsZSA9ICJJbmNvbWUiKSwNCiAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIkxpZmUgRXhwZWN0YW5jeSIpLA0KICBzaG93bGVnZW5kID0gRkFMU0UgICMgSGlkZSBsZWdlbmQgZm9yIGluZGl2aWR1YWwgY291bnRyaWVzDQopDQoNCiMgQ29tYmluZSB0aGUgcGxvdCBhbmQgbGF5b3V0DQpzY2F0dGVyX3Bsb3QgPC0gbGF5b3V0KHNjYXR0ZXJfcGxvdCwgbGF5b3V0KQ0KDQojIERpc3BsYXkgdGhlIGludGVyYWN0aXZlIHNjYXR0ZXIgcGxvdA0Kc2NhdHRlcl9wbG90DQpgYGANCg==